package com.easygem.system.service;

import com.easygem.common.error.SystemException;
import com.easygem.common.model.system.Employee;
import com.easygem.common.model.system.Menu;
import com.easygem.common.model.system.Role;
import com.easygem.common.vo.system.*;

import java.util.List;
import java.util.Map;

/**
 * @Author 文晓平
 * @Date 2024/12/7 15:43
 * @Version 1.0
 **/
public interface EmployeeService {

    /**
     * 根据用户名查询用户
     *
     * @param name 用户名
     * @return
     */
    Employee findEmployeeByName(String name);


    /**
     * 查询用户角色
     *
     * @param id 用户id
     * @return
     */
     List<Role> findRolesById(Long id) throws SystemException;

    /**
     * 根据用户角色查询用户的菜单
     * 菜单: menu+button
     *
     * @param roles 用户的角色
     * @return
     */
    List<Menu> findMenuByRoles(List<Role> roles);

    /**
     * 加载菜单
     *
     * @return
     */
    List<MenuNodeVO> findMenu();

    /**
     * 用户列表
     * @param employeeVO
     * @return
     */
    PageVO<Employee> findEmployeeList(Integer pageNum, Integer pageSize, EmployeeVO employeeVO);

    /**
     * 根据部门编号查询用户列表
     * @param deptId  部门编号
     * @return
     */
    List<EmployeeVO> findEmployeeListByDept(Long deptId);


    /**
     * 删除用户
     *
     * @param id
     */
    void deleteById(Long id) throws SystemException;

    /**
     * 更新状态
     *
     * @param id
     * @param status
     */
    void updateStatus(Long id, Boolean status) throws SystemException;

    /**
     * 添加用户
     * @param employeeVO
     */
    void add(EmployeeVO employeeVO) throws SystemException;

    /**
     * 更新用户
     *
     * @param id
     * @param employeeEditVO
     */
    void update(Long id, EmployeeEditVO employeeEditVO) throws SystemException;

    /**
     * 编辑用户
     *
     * @param id
     * @return
     */
    EmployeeEditVO edit(Long id) throws SystemException;

    /**
     * 已拥有的角色ids
     *
     * @param id 用户id
     * @return
     */
    List<Long> roles(Long id) throws SystemException;

    /**
     * 分配角色
     *
     * @param id
     * @param roleId
     */
    void assignRoles(Long id,Long roleId) throws SystemException;

    /**
     * 所有用户
     *
     * @return
     */
    List<Employee> findAll();

    /**
     * 员工登入
     * @param empName
     * @param password
     * @return
     */
    String login(String empName, String password) throws SystemException;


    /**
     * 用户详情
     * @return
     */
    EmployeeInfoVO info() throws SystemException;


    /**
     * 更新用户状态
     * @param empId  用户编号
     * @param status  用户状态
     * @return
     */
    void updateEmployeeStatus( Long empId,Integer status) throws SystemException;

    /**
     * 更新多个用户状态
     * @param map  多个用户编号，用户状态
     * @return
     */
    void updateEmployeeStatusMore(Map<String, Object> map) throws SystemException;

    List<Employee> findEmployeeList();


    /**
     * 查询用户角色
     *
     * @param userId 用户id
     * @return
     */
    Role findRoleById(Long userId) throws SystemException;


    /**
     * 根据用户角色查询用户的菜单
     * 菜单: menu+button
     *
     * @param role 用户的角色
     * @return
     */
    List<Menu> findMenuByRole(Role role);

    /**
     * 判断输入值与原密码是否一致
     */
    boolean isFitRawPwd(String rawPwd);

    /**
     * 修改密码
     * @param newPwd 新密码
     * @throws SystemException
     */
    void editPwd( String newPwd);
    /**
     * 根据用户编号得到用户角色
     * @param userId  用户编号
     * @return
     * @throws SystemException
     */
    Long getUserRole(Long userId) throws SystemException;
}
